#!/usr/bin/env node

/**
 * 构建后自动上传脚本
 * 在electron-builder完成后自动将exe文件上传到腾讯云存储
 */

const fs = require('fs');
const path = require('path');
const { version } = require('../package.json');

// 引入腾讯云上传服务
const cosUploader = require('../lib/cosUploader');

/**
 * 扫描dist目录，找到exe文件
 * @returns {Array} exe文件列表
 */
function scanExeFiles() {
  const distPath = path.join(__dirname, '../dist');
  
  if (!fs.existsSync(distPath)) {
    console.log('dist目录不存在，跳过上传');
    return [];
  }

  const files = fs.readdirSync(distPath);
  const exeFiles = files.filter(file => 
    file.endsWith('.exe') && 
    file.includes('Whistle') && 
    !file.includes('.blockmap')
  );

  return exeFiles.map(file => path.join(distPath, file));
}

/**
 * 获取版本信息
 * @returns {string} 版本号
 */
function getVersion() {
  return version || '1.0.0';
}

/**
 * 记录上传日志
 * @param {Object} result 上传结果
 * @param {string} filePath 文件路径
 */
function logUploadResult(result, filePath) {
  const logPath = path.join(__dirname, '../upload-logs');
  
  if (!fs.existsSync(logPath)) {
    fs.mkdirSync(logPath, { recursive: true });
  }

  const logFile = path.join(logPath, `upload-${new Date().toISOString().split('T')[0]}.log`);
  const logEntry = {
    timestamp: new Date().toISOString(),
    fileName: path.basename(filePath),
    version: getVersion(),
    success: result.success,
    url: result.url || '',
    error: result.error || '',
    fileSize: result.fileInfo?.fileSize || 0
  };

  const logLine = JSON.stringify(logEntry) + '\n';
  
  try {
    fs.appendFileSync(logFile, logLine);
  } catch (error) {
    console.error('写入日志失败:', error.message);
  }
}

/**
 * 清理旧版本
 */
async function cleanupOldVersions() {
  try {
    console.log('开始清理旧版本...');
    const deletedCount = await cosUploader.deleteOldVersions();
    if (deletedCount > 0) {
      console.log(`清理完成，删除了 ${deletedCount} 个旧版本`);
    } else {
      console.log('无需清理，版本数量在限制范围内');
    }
  } catch (error) {
    console.error('清理旧版本失败:', error.message);
  }
}

/**
 * 主函数：执行构建后上传逻辑
 */
async function main() {
  console.log('=== 开始构建后上传流程 ===');
  console.log(`版本: ${getVersion()}`);
  console.log(`时间: ${new Date().toISOString()}`);

  try {
    // 扫描exe文件
    const exeFiles = scanExeFiles();
    
    if (exeFiles.length === 0) {
      console.log('未找到需要上传的exe文件');
      return;
    }

    console.log(`找到 ${exeFiles.length} 个exe文件:`);
    exeFiles.forEach(file => console.log(`  - ${path.basename(file)}`));

    // 上传每个exe文件
    for (const filePath of exeFiles) {
      console.log(`\n开始上传: ${path.basename(filePath)}`);
      
      // 直接上传，不检查版本是否存在（会自动清理旧版本）

      // 上传文件
      const result = await cosUploader.uploadExeFile(filePath, getVersion());
      
      if (result.success) {
        console.log('✅ 上传成功!');
        console.log(`   云端路径: ${result.cloudPath}`);
        console.log(`   下载链接: ${result.url}`);
        console.log(`   文件大小: ${(result.fileInfo.fileSize / 1024 / 1024).toFixed(2)} MB`);
      } else {
        console.error('❌ 上传失败:', result.error);
      }

      // 记录日志
      logUploadResult(result, filePath);
    }

    // 注意：旧版本清理已在uploadExeFile中自动完成

    console.log('\n=== 构建后上传流程完成 ===');
    
  } catch (error) {
    console.error('构建后上传流程失败:', error.message);
    process.exit(1);
  }
}

// 如果直接运行此脚本
if (require.main === module) {
  main().catch(error => {
    console.error('脚本执行失败:', error);
    process.exit(1);
  });
}

module.exports = main;
